<?php
/**
 * Created by PhpStorm.
 * User: 小蛮哼哼哼
 * Email: 243194993@qq.com
 * Date: 2021/7/21
 * Time: 11:09
 * motto: 现在的努力是为了小时候吹过的牛逼！
 */

declare(strict_types=1);

namespace app\common\lib;


class Tree
{
    //私有属性，用于保存实例
    private static ?Tree $instance = null;

    //构造方法私有化，防止外部创建实例
    public function __construct()
    {
    }

    //公有方法，用于获取实例
    public static function getInstance()
    {
        //判断实例有无创建，没有的话创建实例并返回，有的话直接返回
        if (empty(self::$instance)) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    //克隆方法私有化，防止复制实例
    private function __clone()
    {
    }

    /**
     * 无限级分类
     * @param array $arr
     * @param int $id
     * @param int $lev
     * @param string $child
     * @return array
     */
    public function TreeCate(array $arr = [], int $id = 0, int $lev = 1,string $child = 'children')
    {
        $lists = [];
        foreach ($arr as $k => $v) {
            if ($v['pid'] == $id) {
                $tmp = $this->TreeCate($arr, $v['id'], $lev + 1,$child);
                if ($tmp) {
                    $v['lev'] = $lev;
                    $v[$child] = $tmp;
                }
                $lists[] = $v;
            }
        }
        return $lists;
    }

}